home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 2 / ETO Development Tools 2.iso / Essentials / MacApp Documentation / MacApp AppleLink Messages / MacApp.Tech$ Aug 89 / X0119-CoHandler sample-Aug89 < prev    next >
Encoding:
Text File  |  1989-08-30  |  3.0 KB  |  113 lines  |  [TEXT/GEOL]

  1. Item    1635670                         30-Aug-89        09:55
  2.  
  3. From:   KEMINK1                         Kemink, Joost,APL
  4.  
  5. To:     SALEME                          Peat Mareick, Lance Saleme,VCA
  6.  
  7. cc:     MACAPP.TECH$                    MACAPP Tech
  8.  
  9. Sub:    CoHandler sample
  10.  
  11. Lance,
  12.  
  13. I find cohandlers very useful to perform time-consuming tasks in the
  14. 'background'. For example, if you want to sort numbers, the sorting algorithm
  15. can be implemented as a state machine that is executed at idle time. Below, I
  16. have included some code that implements a simple 'Idler'.
  17.  
  18. To work with it, create and initialize it, passing a posititve integer as the
  19. argument. This integer specifies how often the idle method of the idler should
  20. be called. The DoIdle method decrements the fToGo field (which can be
  21. interpreted as the state vector of the state machine), and optionally removes
  22. the handler from the cohandler chain (depending on the fRemoveWhenFinished
  23. boolean). A few months(?) ago, there was a discussion on MacApp.Tech$ about
  24. handlers removing themselves from the cohandler chain, but I think the method
  25. described here is valid (has anyone any input on this?).
  26.  
  27. To install the idler in the cohandler chain, use the Install method, to remove
  28. it, use Remove.
  29.  
  30. I have compiled and tested the code with MacApp 2.0b9 and it worked fine for
  31. me. Information about state vectors and processes can be found in: Tanenbaum,
  32. Andrew S., Structured Computer Organization.  Englewood Cliffs NJ:
  33. Prentice/Hall International editions
  34.  
  35. Hope this helps,
  36.  
  37. Joost
  38.  
  39. { ------------- Code follows --------------- }
  40.  
  41.    TIdler = OBJECT(TEvtHandler)
  42.    fToGo   :   INTEGER;
  43.    fInstalled  :   BOOLEAN;
  44.    fRemoveWhenFinished :   BOOLEAN;
  45.  
  46.    PROCEDURE TIdler.IIdler(initialValue:INTEGER);
  47.  
  48.    PROCEDURE TIdler.Install;
  49.    PROCEDURE TIdler.Remove;
  50.  
  51.    FUNCTION  TIdler.DoIdle(phase:IdlePhase):BOOLEAN; OVERRIDE;
  52.  
  53.    FUNCTION  TIdler.IsFinished:BOOLEAN;
  54.    FUNCTION  TIdler.IsInstalled:BOOLEAN;
  55.    END;
  56.  
  57.    PROCEDURE TIdler.IIdler(initialValue:INTEGER);
  58.    BEGIN
  59.    SELF.fToGo:=initialValue;
  60.    SELF.fInstalled:=FALSE;
  61.    SELF.IEvtHandler(NIL);
  62.    SELF.fIdleFreq:=1;
  63.    SELF.fRemoveWhenFinished:=TRUE;
  64.    END;
  65.  
  66.    FUNCTION TIdler.DoIdle(phase:IdlePhase):BOOLEAN; OVERRIDE;
  67.    BEGIN
  68.    {$IFC qDebug}
  69.    Write('TIdler.DoIdle - ');
  70.    {$ENDC qDebug}
  71.    IF NOT SELF.IsFinished THEN
  72.    BEGIN
  73.    SELF.fToGo:=SELF.fToGo-1;
  74.    {$IFC qDebug}
  75.    Writeln('To Go: ',SELF.fToGo:1);
  76.    {$ENDC qDebug}
  77.    END;
  78.    IF SELF.IsFinished AND SELF.fRemoveWhenFinished THEN
  79.    SELF.Remove;
  80.    DoIdle:=FALSE;
  81.    END;
  82.  
  83.    PROCEDURE TIdler.Install;
  84.    BEGIN
  85.    IF NOT SELF.IsInstalled THEN
  86.    BEGIN
  87.    SELF.fInstalled:=TRUE;
  88.    gApplication.InstallCoHandler(SELF,TRUE);
  89.    END;
  90.    END;
  91.  
  92.    PROCEDURE TIdler.Remove;
  93.    BEGIN
  94.    IF SELF.IsInstalled THEN
  95.    BEGIN
  96.    fInstalled:=FALSE;
  97.    gApplication.InstallCoHandler(SELF,FALSE);
  98.    END;
  99.    END;
  100.  
  101.    FUNCTION  TIdler.IsFinished:BOOLEAN;
  102.    BEGIN
  103.    IsFinished:=(SELF.fToGo<=0);
  104.    END;
  105.  
  106.    FUNCTION  TIdler.IsInstalled:BOOLEAN;
  107.    BEGIN
  108.    IsInstalled:=SELF.fInstalled;
  109.    END;
  110.  
  111. { ---- End of code ---- }
  112.  
  113.